#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

//共享内存
int* p = NULL;
void hand(int s)
{
	if(2 == s)
	{
		//5 卸载共享内存
		shmdt(p);
		printf("bye bye!\n");
		exit(0);
	}
}
int main()
{
	signal(2,hand);

	//1 创建key
	key_t key = ftok(".",'m');
	if(-1 == key) 
	{	
		printf("创建key失败:%m\n");
		exit(-1);
	}
	printf("创建key成功!\n");
#if 0                            //不写也可以，只要有一个共享内存段就好
	//2 获取共享内存   页  page  4K==1页
	int shmid = shmget(key,4096,IPC_CREAT);
	if(-1 == shmid) printf("创建共享内存失败:%m\n"),exit(-1);
	printf("创建共享内存：%m!\n");
#endif
	//3 挂载共享内存
	p = shmat(4915207,NULL,0);    //shmid要去查看自己的id；
	if(NULL == p) 
	{
		printf("挂载共享内存失败:%m\n");
		exit(-1);
	}
	printf("挂载共享内存：%m\n");

	//4 使用
	int  n=6;
	while(1)
	{
		*p = n++;
		sleep(1);
	}

	return 0;
}